home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
TeX 1995 July
/
TeX CD-ROM July 1995 (Disc 1)(Walnut Creek)(1995).ISO
/
macros
/
latex209
/
contrib
/
misc
/
cases.sty
(
.txt
)
< prev
next >
Wrap
LaTeX Document
|
1993-08-30
|
4KB
|
105 lines
% C A S E S . S T Y ver 1.0
% Copyright (C) 1993 by Donald Arseneau
% These macros may be freely transmitted, reproduced, or modified
% provided that this notice is left intact. Sub-equation numbering
% is based on subeqn.sty by Stephen Gildea.
% LaTeX environment "numcases" to produce multi-case equations with
% a separate equation number for each case. Also, "subnumcases"
% gives each case numbered with the equation number plus a letter
% [8a, 8b, etc.] The syntax is
% \begin{numcases}{left_side}
% case_1 & explanation \\
% case_2 & explanation \\
% ...
% case_n & explanation
% \end{numcases}
% Each case is a math formula, and each explanation is a piece of
% lr mode text (which may contain math mode). The explanations are
% optional. Equation numbers are inserted automatically, just as for
% the eqnarray environment. In particular, the \nonumber command
% suppresses an equation number, and the \label command allows
% reference to a particular equation. In a subnumcases environment,
% a \label in the left_side of the equation gives the overall equation
% number, without any letter.
% - - - - -
% A simple example is:
% \begin{numcases}{|x|=}
% x, & for $x \geq 0$\\
% -x, & for $x < 0$
% \end{numcases}
% / x for x > 0 (1)
% |x| = < -
% \ -x for x < 0 (2)
% - - - - -
% Another:
% \begin{subnumcases}{f(x)=\label{f(x)}}
% 1/3 & if $0 < x < 1$;\\
% 2/3 & if $3 < x < 4$;\label{.6666}\\
% 0 & elsewhere.
% \end{subnumcases}
% / 1/3 if 0 < x < 1; (18.23a)
% |
% f(x) = < 2/3 if 3 < x < 4; (18.23b)
% |
% \ 0 elsewhere. (18.23c)
% and \ref{f(x)} will then give (18.23) while \ref{.6666} gives (18.23b)
% - - - begin definitions - - -
\def\numcases#1{$$%
\setbox\z@\hbox{\advance\c@equation\@ne\let\@currentlabel\theequation % local
$\displaystyle {#1}\m@th\mskip\medmuskip$}%
\numc@setsub
\dimen@ii\displaywidth
\setbox\tw@\vbox\bgroup
\stepcounter{equation}\let\@currentlabel\theequation
\global\@eqnswtrue\m@th
\tabskip\@centering\let\\\@eqncr
\halign to\dimen@ii
\bgroup
\kern\wd\z@ \kern13\p@ \global\@eqcnt\@ne$\displaystyle\tabskip\z@{##}$\hfil
&\global\@eqcnt\tw@ \quad ##\unskip \hfil\tabskip\@centering
&\llap{##}\tabskip\z@\cr}
\def\endnumcases{\@@eqncr
\egroup % end \halign, which does not contain first column or brace
\global\advance\c@equation\m@ne
\unskip\unpenalty\unskip\unpenalty
\setbox\z@\lastbox \nointerlineskip \copy\z@ % grab last line, then put it back
\g@tboxedwidth\z@ % box \z@ destroyed, width of columns -> \dimen@i
\egroup% end \vbox (\box\tw@)
\hbox to\displaywidth{% assemble the whole equation
\hskip\@centering \hbox to\dimen@i{$\displaystyle \box\z@ % parameter #1
\dimen@\ht\tw@ \advance\dimen@\dp\tw@ % get size of brace
\left\{\vcenter to\dimen@{\vfil}\right.\n@space % make brace
$\hfil}\hskip\@centering % finished first part (filled whole line)
\kern-\displaywidth $\vcenter{\box\tw@}$% overlay the alignment
}% end the \hbox
\numc@resetsub
$$\global\@ignoretrue}
% Get width of all boxes on a line, ignoring the glue between them.
% Return total width in \dimen@i (global).
\def\g@tboxedwidth#1{\setbox#1\hbox{\unhbox#1\global\dimen@i\z@
\G@tBoxedWidth}}
\def\G@tBoxedWidth{\unskip\unskip\unskip \setbox\z@\lastbox
\ifvoid\z@\else \global\advance\dimen@i\wd\z@ \expandafter\G@tBoxedWidth \fi}
\let\numc@setsub\relax
\let\numc@resetsub\relax
\def\subnumcases{\let\numc@setsub\subequations
\let\numc@resetsub\endsubequations\numcases}
\let\endsubnumcases\endnumcases
% These versions of subequations follow the style of Gildea's subeqn.sty,
% but are rewritten.
\def\subequations{\refstepcounter{equation}%
\edef\@savedequation{\the\c@equation}%
\let\@tempa\protect % *
\def\protect{\noexpand\protect\noexpand}% *
\edef\theequation{\theequation\noexpand\alph{equation}}%
\let\protect\@tempa % *
\global\c@equation\z@}
\def\endsubequations{%
\setcounter{equation}{\@savedequation}%
\global\@ignoretrue}
% Send problem reports to asnd@Reg.TRIUMF.CA
% test integrity:
% brackets: round, square, curly, angle: () [] {} <>
% backslash, slash, vertical, at, dollar, and: \ / | @ $ &
% hat, grave, acute (apostrophe), quote, tilde, under: ^ ` ' " ~ _